﻿using Cotizav.Presentacion.WinForms.Persona.Cliente;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Cotizav.Presentacion.WinForms.Cotizacion
{
    public partial class ListarCotizacion : Form
    {
        private List<Entidades.FiltroBusqueda> listaFiltro;
        private Dictionary<string, string> listaEstadoCotizacion;
        
        public ListarCotizacion()
        {
            InitializeComponent();

            listaFiltro = new List<Entidades.FiltroBusqueda>();
            listaEstadoCotizacion = new Dictionary<string, string>();
            listaEstadoCotizacion.Add("PE", "Pendiente");
            listaEstadoCotizacion.Add("AN", "Anulado");
        }

        private void ListarCotizacion_Load(object sender, EventArgs e)
        {
            LoadListTipoCotizacion();
            LoadListEstadoCotizacion();
            LoadListVendedor();
            LoadListSucursal();
        }

        private void chkTipoCotizacion_CheckedChanged(object sender, EventArgs e)
        {
            if (chkTipoCotizacion.Checked)
            {
                cmbTipoCotizacion.Enabled = true;
            }
            else
            {
                cmbTipoCotizacion.Enabled = false;
            }
        }

        private void chkEstado_CheckedChanged(object sender, EventArgs e)
        {
            if (chkEstado.Checked)
            {
                cmbEstado.Enabled = true;
            }
            else
            {
                cmbEstado.Enabled = false;
            }
        }

        private void chkFechaRegistro_CheckedChanged(object sender, EventArgs e)
        {
            if (chkFechaRegistro.Checked)
            {
                dateFechaInicio.Enabled = true;
                dateFechaFin.Enabled = true;
            }
            else
            {
                dateFechaInicio.Enabled = false;
                dateFechaFin.Enabled = false;
            }
        }

        private void chkCliente_CheckedChanged(object sender, EventArgs e)
        {
            if (chkCliente.Checked)
            {
                btnBuscarCliente.Enabled = true;
            }
            else
            {
                btnBuscarCliente.Enabled = false;
            }
        }

        private void chkVendedor_CheckedChanged(object sender, EventArgs e)
        {
            if (chkVendedor.Checked)
            {
                cmbVendedor.Enabled = true;
            }
            else
            {
                cmbVendedor.Enabled = false;
            }
        }

        private void chkSucursal_CheckedChanged(object sender, EventArgs e)
        {
            if (chkSucursal.Checked)
            {
                cmbSucursal.Enabled = true;
            }
            else
            {
                cmbSucursal.Enabled = false;
            }
        }

        private void LoadListVendedor()
        {
            cmbVendedor.DataSource = (new LogicaNegocio.VendedorBLL()).Listar();
            cmbVendedor.DisplayMember = "Nombre";
            cmbVendedor.ValueMember = "IdVendedor";
            cmbVendedor.SelectedIndex = -1;
        }

        private void LoadListSucursal()
        {
            cmbSucursal.DataSource = (new LogicaNegocio.SucursalBLL()).Listar();
            cmbSucursal.DisplayMember = "NombreSucursal";
            cmbSucursal.ValueMember = "IdSucursal";
            cmbSucursal.SelectedIndex = -1;
        }

        private void LoadListTipoCotizacion()
        {
            cmbTipoCotizacion.DataSource = (new LogicaNegocio.TipoCotizacionBLL()).Listar();
            cmbTipoCotizacion.DisplayMember = "Descripcion";
            cmbTipoCotizacion.ValueMember = "IdTipoCotizacion";
            cmbTipoCotizacion.SelectedIndex = -1;
        }

        private void LoadListEstadoCotizacion()
        {
            cmbEstado.DataSource = listaEstadoCotizacion.ToList();
            cmbEstado.DisplayMember = "Value";
            cmbEstado.ValueMember = "Key";
            cmbEstado.SelectedIndex = -1;
        }

        private void btnBuscarCliente_Click(object sender, EventArgs e)
        {
            BuscarCliente iuBusqueda = new BuscarCliente();
            DialogResult dr = iuBusqueda.ShowDialog();

            if (dr == DialogResult.OK)
            {
                Entidades.Cliente resultCliente = iuBusqueda.Result;

                if (resultCliente != null)
                {
                    txtNombreCliente.Tag = resultCliente.IdCliente;
                    txtNombreCliente.Text = resultCliente.RazonSocial;
                }
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if (chkTipoCotizacion.Checked)
                listaFiltro.Add(new Entidades.FiltroBusqueda() { Atributo = "IdTipoCotizacion", Valor1 = cmbTipoCotizacion.SelectedValue });

            if(chkEstado.Checked)
                listaFiltro.Add(new Entidades.FiltroBusqueda() { Atributo = "estado", Valor1 = cmbEstado.SelectedValue });

            if(chkFechaRegistro.Checked)
                listaFiltro.Add(new Entidades.FiltroBusqueda() { Atributo = "fechaRegistro", Valor1 = dateFechaInicio.Value, Valor2 = dateFechaFin.Value });

            if(chkCliente.Checked)
                listaFiltro.Add(new Entidades.FiltroBusqueda() { Atributo = "idCliente", Valor1 = txtNombreCliente.Tag });

            if(chkVendedor.Checked)
                listaFiltro.Add(new Entidades.FiltroBusqueda() { Atributo = "idVendedor", Valor1 = cmbVendedor.SelectedValue });

            if(chkSucursal.Checked)
                listaFiltro.Add(new Entidades.FiltroBusqueda() { Atributo = "idSucursal", Valor1 = cmbSucursal.SelectedValue });


            LogicaNegocio.FiltroBusquedaBLL filtroBusquedaBLL = new LogicaNegocio.FiltroBusquedaBLL();
            string condicion = filtroBusquedaBLL.GenerarCondicion(listaFiltro);

            LogicaNegocio.CotizacionBLL cotizacionBLL = new LogicaNegocio.CotizacionBLL();
            List<Entidades.Cotizacion> listaCotizacion = cotizacionBLL.Listar(condicion);

            gridResultado.DataSource = null;
            gridResultado.DataSource = listaCotizacion;

            listaFiltro.Clear();
        }

        private void gridResultado_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridResultado.DataSource != null)
            {
                gridResultado.Columns["idCotizacion"].Visible = false;
                gridResultado.Columns["idTipoCotizacion"].Visible = false;
                gridResultado.Columns["idCliente"].Visible = false;
                gridResultado.Columns["idVendedor"].Visible = false;
                gridResultado.Columns["idSucursal"].Visible = false;
                gridResultado.Columns["idContacto"].Visible = false;
                gridResultado.Columns["CodigoCotizacion"].HeaderText = "Código";
                gridResultado.Columns["CodigoCotizacion"].DisplayIndex = 1;
                gridResultado.Columns["NumeroCotizacion"].Visible = false;
                gridResultado.Columns["Obra"].DisplayIndex = 8;
                gridResultado.Columns["Referencia"].DisplayIndex = 9;
                gridResultado.Columns["TipoCambio"].Visible = false;
                gridResultado.Columns["Moneda"].DisplayIndex = 10;
                gridResultado.Columns["Igv"].Visible = false;
                gridResultado.Columns["NombreCliente"].HeaderText = "Cliente";
                gridResultado.Columns["NombreCliente"].DisplayIndex = 2;
                gridResultado.Columns["NombreVendedor"].HeaderText = "Vendedor";
                gridResultado.Columns["NombreVendedor"].DisplayIndex = 5;
                gridResultado.Columns["NombreSucursal"].HeaderText = "Sucursal";
                gridResultado.Columns["NombreSucursal"].DisplayIndex = 6;
                gridResultado.Columns["NombreContacto"].HeaderText = "Contacto";
                gridResultado.Columns["NombreContacto"].DisplayIndex = 7;
                gridResultado.Columns["EsAlquiler"].Visible = false;
                gridResultado.Columns["EsVenta"].Visible = false;
                gridResultado.Columns["PrecioTotal"].Visible = false;
                gridResultado.Columns["PrecioTotalExt"].Visible = false;
                gridResultado.Columns["PrecioTotalLoc"].Visible = false;
                gridResultado.Columns["Dscto"].Visible = false;
                gridResultado.Columns["DsctoExt"].Visible = false;
                gridResultado.Columns["DsctoLoc"].Visible = false;
                gridResultado.Columns["ValorVenta"].Visible = false;
                gridResultado.Columns["ValorVentaExt"].Visible = false;
                gridResultado.Columns["ValorVentaLoc"].Visible = false;
                gridResultado.Columns["Impuestos"].Visible = false;
                gridResultado.Columns["ImpuestosExt"].Visible = false;
                gridResultado.Columns["ImpuestosLoc"].Visible = false;
                gridResultado.Columns["Total"].Visible = false;
                gridResultado.Columns["TotalExt"].Visible = false;
                gridResultado.Columns["TotalLoc"].Visible = false;
                gridResultado.Columns["Estado"].DisplayIndex = 3;
                gridResultado.Columns["Activo"].Visible = false;
                gridResultado.Columns["FechaRegistro"].HeaderText = "Fecha de registro";
                gridResultado.Columns["FechaRegistro"].DisplayIndex = 4;
                gridResultado.Columns["UsuarioRegistro"].Visible = false;
                gridResultado.Columns["FechaModificacion"].Visible = false;
                gridResultado.Columns["UsuarioModificacion"].Visible = false;
            }
        }

        private void gridResultado_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (gridResultado.Columns[e.ColumnIndex].Name == "Estado")
            {
                string selEstado = e.Value.ToString();

                switch (selEstado)
                {
                    case "PE":
                        e.Value = "Pendiente";
                        break;
                    case "AN":
                        e.Value = "Anulado";
                        break;
                }
            }
        }

        private void gridResultado_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (gridResultado.SelectedRows.Count > 0)
            {
                Entidades.Cotizacion selectedCotizacion = gridResultado.SelectedRows[0].DataBoundItem as Entidades.Cotizacion;

                if (selectedCotizacion != null)
                {
                    MostrarCotizacion iuMostrarCotizacion = new MostrarCotizacion(selectedCotizacion);
                    iuMostrarCotizacion.MdiParent = this.MdiParent;
                    iuMostrarCotizacion.Show();
                }
            }
        }
    }
}
